(defpackage #:game
  (:use #:cl)
  (:export #:game
           #:player
           #:player=
           #:player-equal
           #:opponent
           #:point
           #:set-turn
           #:move-checker
           #:undo-move
           #:finish-move
           #:offer-double
           #:accept-double
           #:refuse-double
           #:roll-dice
           #:set-winner
           #:opponents-turn
           #:opponent-can-double-p
           #:turn
           ))

(defpackage #:board
  (:use #:cl)
  (:export #:bar
           #:off
           #:make-empty-board
           #:make-initial-board
           #:point-id
           #:pointp
           #:point-id
           #:point-number
           #:place
           #:checkers-on-point
           #:checkers-on-bar
           #:checkers-off
           #:set-checkers-on-point
           #:set-checkers-on-bar
           #:set-checkers-off
           #:has-checkers-on-p
           #:move-checker
           #:highest
           #:loss))

(defpackage #:ui
  (:use #:cl)
  (:export #:player
           #:base-ui
           #:refresh
           #:checkers-locked-p
           #:offer-double-locked-p
           #:accept-double-locked-p
           #:finish-move-locked-p
           #:undo-locked-p
           #:unlock-only
           #:pausedp))

(defpackage #:fsm
  (:use #:cl)
  (:export #:defmachine
           #:undefine-machine
           #:state-bindings))
